package leetcode_day._2021._202105._0110;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/5/3 10:12
 * 整数反转
 * 算法：数学
 * 当前结果为 ans，下一位为 next
 * ans * 10 + next > MAX_VALUE
 *  当 ans * 10 > MAX_VALUE, 则一定溢出
 *  当 ans * 10 = MAX_VALUE, next > 7 溢出
 * ans * 10 + next < MIN_VALUE
 *  当 ans * 10 < MAX_VALUE, 则一定溢出
 *  当 ans * 10 = MIN_VALUE, next < -8 溢出
 * --------------------------------------------
 * max = [max/10] * 10 + max % 10
 * max % 10 = 7
 * ans * 10 + next <= [max/10] * 10 + max % 10
 * (ans - [max/10]) * 10 <= 7 - next
 *   当 ans > [max/10], 则左边最小为 10, 而 next 肯定大于 0, 小于最大数, 则给定的数一定为正数, 等式不成立
 *   当 ans = [max/10], 则左边为 0, 当 next <= 7 时, 等式才成立
 *   当 ans < [max/10], 则左边最大为 -10, 而 next <= 9, 等式一定成立
 * 当 ans * 10 + next <= max 时, next <= 7 一定成立, 所以只要满足 ans <= [max/10], 则肯定不会溢出
 */
public class _03_7 {
    public static void main(String[] args) {
//        System.out.println(new _03_7().reverse(-123));
        System.out.println(Integer.MIN_VALUE % 10);
    }

    public int reverse(int x) {
        int ans = 0;
        while (x != 0) {
            if (ans > Integer.MAX_VALUE / 10 || ans < Integer.MIN_VALUE / 10) return 0;
            ans = ans * 10 + x % 10;
            x /= 10;
        }
        return ans;
    }
}
